package com.firexxx;

/**
 * @description: TODO

 * @author: zhuangzhang2
 * @date: 2020/8/29 14:43
 */
public class TypeCheckMain {

    static class Base<T> {
        public void set(T t) {
        }
    }

    static class Derived extends Base<String> {

        public void set(String t) {
        }
    }

    public static void main(String[] args) {
        //编译期类型检查：Attr在方法符号引用消解时get这个Name会被解析到get(java.lang.String)，和1无法兼容
//        Base<String> base1 = new Derived();
//        base1.set(1);

        //运行时类型检查：Attr在符号引用消解时，由于A未指定实际泛型实例化类型，因此默认为Object，和A中的get(java.lang.Object)兼容，因此不会报错
        Base base2 = new Derived();
        base2.set(1);
    }

}
